package com.saceem.imagenes.logica;

import java.sql.Date;
import java.util.GregorianCalendar;

import org.apache.log4j.Logger;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.PersistenceException;
import javax.validation.ConstraintViolationException;

import com.saceem.beans.Imagenes;
import com.saceem.dao.ImagenesDao;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

/**
 * @author nbordenave
 * 
 */
@Stateless
public class ImageManagerBean implements ImageManager {

	private static final Logger log = Logger.getLogger(ImageManagerBean.class
			.getName());

	@EJB
	ImagenesDao imgDao;

	@Override
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public Boolean salvarImagen(Imagenes img, byte[] datos64) throws Exception {
		boolean result = false;
		try {
			Date fecha = new Date(GregorianCalendar.getInstance()
					.getTimeInMillis());
			img.setFecha(fecha);

			if (imgDao.salvarImagen(img)) {
				img.setDatos64(datos64);

				if (modificarImagen(img)) {
					log.info("imagen : " + img + " guardada y modificada");
					result = true;
				}
				// Esto es para implementar Mensajeria.
				// mNotificationUtils.sendJMSMessageToNotificationQueue(user);
			}
		} catch (ConstraintViolationException e) {
			// log.error("ConstraintViolationException");
			throw e;
		} catch (PersistenceException e) {
			// log.error("PersistenceException");
			throw e;
		} catch (Exception e) {
			throw e;
		}
		return result;
	}

	@Override
	public Boolean modificarImagen(Imagenes img) throws Exception {
		boolean result = false;
		try {
			if (imgDao.modificarImagen(img) != null) {
				result = true;
			}
		} catch (ConstraintViolationException e) {
			// log.error("ConstraintViolationException");
			throw e;
		} catch (PersistenceException e) {
			// log.error("PersistenceException");
			throw e;
		} catch (Exception e) {
			throw e;
		}

		return result;
	}

	@Override
	public String getImage(String name, String empresa) throws Exception {
		log.info("Buscando : " + name + " - " + empresa);

		String res64 = null;
		Imagenes img = imgDao.buscarImagen(name, empresa);
		if (img != null) {
			// res64 = img.getDatos64().toString();
			res64 = Base64.encode(img.getDatos64());
		}
		return res64;
	}

	@Override
	public byte[] getImageBlob(String name, String empresa) throws Exception {
		log.info("Buscando : " + name + " - " + empresa);

		byte[] imgFac = null;
		Imagenes img = imgDao.buscarImagen(name, empresa);
		if (img != null) {
			imgFac = img.getDatos64();
		}
		return imgFac;
	}

}
